#include <iostream>
#include <vector>
#include <list>
#include <string>
#include <sw/redis++/redis++.h>

using namespace sw::redis;
using namespace std::chrono_literals;

void test_1(Redis &redis)
{   
    redis.flushall(); 
    redis.lpush("key","1"); // 单行插入
    redis.lpush("key",{"2","3"});

    std::vector<std::string> vec{"2","3","4","5"};
    redis.lpush("key",vec.begin(), vec.end()); // 迭代器区间插入

    std::list<std::string> ans;
    auto result = std::front_inserter(ans);
    redis.lrange("key", 0, -1, result);

    for(auto e : ans)
        std::cout << e << " ";
    std::cout << std::endl;
}

void test_2(Redis &redis)
{
    redis.flushall();
    redis.rpush("key","1");
    redis.rpush("key", {"2","3"});

    std::vector<std::string> vec{"4","5"};
    redis.rpush("key",vec.begin(), vec.end());  

    std::vector<std::string> ans;
    auto result = std::back_inserter(ans);
    redis.lrange("key",0, -1, result);

    for(auto e : ans)
        std::cout << e << " ";
    
    std::cout << std::endl;

    long long size = redis.llen("key");
    std::cout << "list的长度为: " << size <<  std::endl;
}

void test_3(Redis &redis)
{
    redis.flushall();
    redis.rpush("key", {"1","2", "3", "4", "5"});
    redis.lpop("key");
    redis.rpop("key");

    std::list<std::string> ans;
    auto result = std::back_inserter(ans);
    redis.lrange("key", 0, -1, result);
    
    for(auto e : ans)
        std::cout << e << " ";
    std::cout << std::endl;

}

void test_4(Redis &redis)
{
    redis.flushall();
    // redis.rpush("key", {"1","2", "3", "4", "5"});
    auto ans = redis.blpop("key",10s);
    if(ans)
    {
        std::cout << "key:" << ans->first << std::endl;
        std::cout << "ele:" << ans->second << std::endl;
    }
    else
        std::cout << "ans无效" << std::endl;
}

int main() 
{    
    Redis redis("tcp://127.0.0.1:6379");
    // test_1(redis);
    // test_2(redis);
    // test_3(redis);
    test_4(redis);
    return 0;
}